﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using vudu.Logica.Fachada;
using vudu.Presentacion.Contrato.VU_03_Gestionar_Pensum_por_Escuela;
using vudu.ClasesDominio;
using System.Web.UI.WebControls;
using System.Data;

namespace vudu.Presentacion.Presentador.VU_03_Gestionar_Pensum_por_Escuela
{
    public class PresentadorConsultarPensumArchivados
    {
        #region Atributos privados

        public IContratoConsultarPensumArchivados _vista;
        private EnlaceLogico _fachada;
        private Escuela _esc;
        private Profesor _profesor;
        private Estudiante _estudiante;
        private int tipoConsulta;
        private string _rol;

        #endregion

        #region Constructor

        public PresentadorConsultarPensumArchivados(IContratoConsultarPensumArchivados vista)
        {
            _vista = vista;
            _fachada = (EnlaceLogico)_vista.Sesion["Fachada"];
            if (_fachada != null)
            {
                _rol = (string)_vista.Sesion["TipoRol"];
                _esc = (Escuela)_fachada.RolActual;
            }
        }

        #endregion

        #region propiedades

        public string Rol
        {
            get { return _rol; }
            set { _rol = value; }
        }

        #endregion
        #region Metodos

        /// <summary>
        /// metodo que se encarga de escribir el nombre del usuario logeado
        /// </summary>
        public void MostrarNombreUsuario()
        {
            Escuela esc = (Escuela)_fachada.RolActual;
            _vista.Actor.Text = _rolUsuario + _separador + esc.NombreEscuela;
        }
        /// <summary>
        /// Metodo encargadodemanejar la paginacion del gridview de pensums
        /// </summary>
        /// <param name="e"></param>
        public void Paginacion(GridViewPageEventArgs e)
        {
            this._vista.TablaPensums.PageIndex = e.NewPageIndex;

        //    this.CargarMateriasDeEscuela();
        }

        /// <summary>
        /// metodo que se encarga de calcular la diferencia entre el numero de materias traidas y el numero de filas total(8)
        /// para ayudar a rellenar las filas vacias del gridview de materia
        /// </summary>
        /// <param name="totalFilas"></param>
        /// <returns></returns>
        private int Diferencia(int totalFilas)
        {
            int diferencia = 0;
            if (totalFilas < _numeroFilas)
            {
                diferencia = _numeroFilas - totalFilas;
            }
            return diferencia;
        }

        /// <summary>
        /// Cargael Gridview con las materias dependiendo de la informacionque se encuentre en la 
        /// lista "_lsita" la cual contiene la lista de materias pertenecientes a la escuela
        /// seleccionada por el dropdwonlist
        /// </summary>
        private void CargarTablaPensums(List<Pensum> pensums)
        {
                DataTable table = new DataTable();
                table.Columns.Add("Periodo Academico", typeof(string));//la resta entre la fecha de inicio y la fecha fin
                table.Columns.Add("Codigo", typeof(string));//id del pensum

                foreach (Pensum pensum in pensums)
                {
                    int idPensum = pensum.IdPensum;
                    if (idPensum != 0)
                    {
                        table.Rows.Add("( " + pensum.FechaInicio.Day + "/" + pensum.FechaInicio.Month + "/" + pensum.FechaInicio.Year +
                                  " - " + pensum.FechaFin.Day + "/" + pensum.FechaFin.Month + "/" + pensum.FechaFin.Year + " )", pensum.IdPensum);

                    }
                }

                this._vista.TablaPensums.DataSource = table;
                this._vista.TablaPensums.DataBind();
            
        }

        public void ImprimirListaPensums()
        {
            List<Pensum> listaPensums = new List<Pensum>();
            Pensum pensumVigente = new Pensum();
            if (this.OpcionRadioButton() == 0)
            {
                tipoConsulta = _tipoArchivados;
                _vista.TipoPensum.Text = _pensumArchivados;
            }
            if (this.OpcionRadioButton() == 1)
            {
                tipoConsulta = _tipoInactivos;
                _vista.TipoPensum.Text = _pensumInactivos;
            }
            if (_esc != null)
            {
                listaPensums = _fachada.ConsultarPensumsArchivadosDeEscuela(_esc, tipoConsulta);
            }
            this.CargarTablaPensums(listaPensums);
        }


        public Pensum ConsultarUnPensum()
        {
            int seleccion = 0;
            Pensum pensumSeleccionado = new Pensum();
            List<Pensum> listaPensums = new List<Pensum>();
            if (_esc != null)
            {
                if (this.OpcionRadioButton() == 0)
                    tipoConsulta = _tipoArchivados;
                if (this.OpcionRadioButton() == 1)
                    tipoConsulta = _tipoInactivos;
                seleccion = (_vista.TablaPensums.PageIndex * 8) + _vista.TablaPensums.SelectedIndex;
                listaPensums = _fachada.ConsultarPensumsArchivadosDeEscuela(_esc, tipoConsulta);
                if(seleccion<listaPensums.Count)
                    pensumSeleccionado = listaPensums[seleccion];
            }
            return pensumSeleccionado;
        }

        public Pensum ConsultarPensumVigente()
        {
            return _fachada.ConsultarPensumActivo(_esc.IdEscuela);
        }

        public int OpcionRadioButton()
        {
            return _vista.Opcion.SelectedIndex;
        }

        #endregion

        #region Constantes

        private const int _numeroFilas = 8;
        private const string _rolUsuario = "Escuela";
        private const string _separador = ": ";
        private const string _pensumArchivados = "Pensums Archivados";
        private const string _pensumInactivos = "Pensums Inactivos";
        private const string _noPensum = "No hay pensums para mostrar";
        private const int _tipoArchivados = 1;
        private const int _tipoInactivos = 2;
        
        #endregion
    }
}